package com.bird.设计原则.开闭原则;

/**
 * @data 2022/1/2 11:01
 * @author: bird
 * @description: 测试课程
 */
public class Test  {
    public static void main(String[] args) {
        // 一一期的需求: 获取java课程的 编号 名称 价格
        ICourse course = new JavaDiscountCount(12, "java-设计模式", 299d);
         JavaDiscountCount javaDiscountCount=(JavaDiscountCount)course;
        System.out.println("课程的ID："+course.getId()+" 课程的名称："+course.getName()+" 课程的原价格："+javaDiscountCount.getPrice()+" 课程的打折价格："+javaDiscountCount.getDisPrice());
    }
}


/*
* 一期需求：获取课程的编号 名称 和价格
*  设计原则：面向抽象编程，这个抽象就是接口。
*  设计思路：
*   第一，首先声明一个接口，课程接口 然后这个课程接口提供了一些获取课程的基础能力的行为 编码 名称 价格和作者等。
*         这样的话 所有的课程只要实现这个接口 就能根据不同的课程提高具体的自己特有的实现。
*   第二， 声明一个具体的java-课程类 然后实现这个接口 那么这个java课程类就具有了一些基本的课程的能力。
*   第三，实例化java课程类 并使用课程接口接收 这样的做的好处是多态的思想。
*
* 二期迭代需求：由于临近双十一 需要给java 课程打八折。
*   设计原则：开闭原则 不修改接口 接口是一种锲约
*   设计思路：
*       第一，重新写个java打折课程类 然后继承java课程类 然后重写父类的获取价格方法 然后在此基础上根据不同的要求进行不同粒度的打折。
*            如果想要获取这个课程的原价的话 可以编写一个获取原价的方法 调用父类的价格。
*       第二，实例化这个java打折课程类 然后使用课程接口接收 这里使用多态的思想，然后调用
* */








/* 扩展需求：
双十一搞活动：java课程打八折。
* 那么这个时候就需要 扩展。扩展的原则是：接口是不应该经常变化的 如果接口变化的话 那么所有的实现类都会变化 这样的话 就导致代码的侵入性。
*
*/


// 如论扩展还是修改接口都不应该变化，接口是相对稳定的 接口作为一种锲约不能随便变动的。